Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра САП
ЛАБОРАТОРНІ РОБОТИ № 1, 2, 3
з курсу: “Адміністрування САПР”
на тему: „Створення компоненту бібліотеки засобами графічного редактора Symbol Editor, Pattern Editor, Library Executive та схеми електричної принципової редактором Shematic”
Львів - 2005
МЕТА РОБОТИ
ТЕОРЕТИЧНІ ВІДОМОСТІ
3. ІНДИВІДУАЛЬНЕ ЗАВДАННЯ
ТЕКСТ ПРОГРАМИ
program TPMark3;
uses
SysUtils,
Windows,
Messages;
var
wc : TWndClassEx; // Зміна шаблону класу вікна.
MainWnd : HWND; // Описувач головного вікна.
Mesg : TMsg; // Змінна для циклу збора повідомлень.
xPos, yPos, nWidth, nHeight : Integer;
MyDC, WMFDC, OldDC : HDC; // Контекст пристрою.
zoom : Integer; // Масштаб (по замовчуванню 100).
brush : HBrush;
// Координати початків координат для всіх графіків.
ox1, oy1, ox2, oy2, ox3, oy3, ox4, oy4, ox5, oy5, ox6, oy6 : integer;
MFile : HMetaFile; // Дескриптор метафайлу.
count : integer; // Допоміжна змінна.
rec : TRect; // Область вікна для малювання.
prec : PRect; // Область для метафайлу.
// Віконна процедура головного вікна.
function WindowProc(wnd : HWND; Msg : Integer; Wparam : Wparam; Lparam : Lparam) : Lresult;
stdcall;
Begin
// Далі проходить цикл обробки повідомлень.
case msg of
wm_destroy :
// Повідомленні, яке надсилається при знищенні вікна.
begin
postquitmessage(0);
exit;
Result := 0;
end
else Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
end;
//---------------------------------------------------------------------------
// Процедура побудови графіка функції, з використанням ліній.
procedure DrawGraphicWithLines(ox, oy, zoom : integer; A, B, krok : double; color : longint);
var
x, y : integer;
Fi, Ro : double;
pen : HPen;
begin
pen := CreatePen(ps_Solid, 2, color);
SelectObject(MyDC, pen);
Fi := 0;
Ro := A*sin(B*Fi);
x := Round(Ro*cos(Fi)*zoom) + ox;
y := Round(Ro*sin(Fi)*zoom) + oy;
MoveToEx(MyDC, x, y, nil);
Fi := Fi + krok;
repeat
Ro := A*sin(B*Fi);
x := Round(Ro*cos(Fi)*zoom) + ox;
y := Round(Ro*sin(Fi)*zoom) + oy;
LineTo(MyDC, x, y);
Fi := Fi + krok;
until Fi > 12.5;
DeleteObject(pen);
end;
//---------------------------------------------------------------------------
// Процедура побудови графіка функції, з використанням точок.
procedure DrawGraphicWithPoints(ox, oy, zoom : integer; A, B, krok : double; color : longint);
var
x, y : integer;
Fi, Ro : double;
begin
Fi := 0;
repeat
Ro := A*sin(B*Fi);
x := Round(Ro*cos(Fi)*zoom) + ox;
y := Round(Ro*sin(Fi)*zoom) + oy;
SetPixel(MyDC, x, y, color);
Fi := Fi + krok;
until Fi > 12.5;
end;
//---------------------------------------------------------------------------
// Процедура побудови координатних осей.
procedure DrawOsi(ox, oy, zoom : integer);
Var
pen : HPen;
brush : HBrush;
point : array [1..5] of TPoint;
begin
// 1. Створуємо перо.
pen := CreatePen(ps_Solid, 2, RGB(0, 0, 0));
SelectObject(MyDC, pen);
// 2. Створюємо пензлик.
brush := CreateSolidBrush(RGB(0, 0, 0));
SelectObject(MyDC, brush);
SetBkMode(MyDc, 1); // Робимо прозорий фон.
// 3. Малюємо осі координат.
MoveToEx(MyDC, ox - zoom - 30, oy, nil);
LineTo(MyDC, ox + zoom + 30, oy); // Малюємо OX.
MoveToEx(MyDC, ox, oy + zoom + 30, nil);
LineTo(MyDC, ox, oy - zoom - 30); // Малюємо OY.
// 4. Малюємо стрілку для осі OX.
point[1].X := ox + zoom + 33;
point[1].Y := oy - 1;
point[2].X := ox + zoom + 13;
point[2].Y := oy ...